<?php
class Model_kajian extends CI_Model {

	/*
	 * 1. var $table digunakan untuk menginisialisasi nama table dari model yang bersangkutan
	 * 2. variable ini ditaruh di global agar bisa di akses oleh semua function
	 * 3. Hal ini juga dimaksudkan apabila terjadi perubahan nama table, tinggal mengganti 1 saja
	 */
	var $table = "kajian";
	
    function Model_kajian()
    {
        // Call the Model constructor
        parent::__construct();
    }
	
	/*
	 * function get_by($id);
	 * function ini digunakan untuk mengambil singgle row saja.
	 * digunakan untuk mengambil data ketika edit data.
	 */
	function get_by($id){
		$this->load->database();
						
			$sql = "SELECT {$this->table}.*, users.nama as nama_user, pemateri.nama as nama_pemateri, lokasi.nama as nama_lokasi FROM {$this->table}, users, pemateri, lokasi WHERE {$this->table}.lokasi_id=lokasi.id AND {$this->table}.pemateri_id=pemateri.id AND {$this->table}.user_id=users.id AND {$this->table}.id='$id';";
			$query = $this->db->query($sql);
		
		$this->db->close();
		
		return $query;
	}
	
	function get_by_link($permalink){
		$this->load->database();
						
			$sql = "SELECT {$this->table}.*, users.nama as nama_user, pemateri.nama as nama_pemateri, pemateri.keterangan as ket_pemateri, lokasi.nama as nama_lokasi, lokasi.alamat, lokasi.keterangan ket_lokasi, lokasi.lat, lokasi.lng, jenis_peserta.nama jns_peserta, lokasi.kota FROM {$this->table}, users, pemateri, (SELECT lokasi.*, kota.nama kota FROM lokasi JOIN kota ON kota.id=kota_id)lokasi, jenis_peserta WHERE {$this->table}.jns_peserta_id=jenis_peserta.id AND {$this->table}.lokasi_id=lokasi.id AND {$this->table}.pemateri_id=pemateri.id AND {$this->table}.user_id=users.id AND {$this->table}.permalink='$permalink';";
			$query = $this->db->query($sql);
		
		$this->db->close();
		
		return $query;
	}
	
	/*
	 * function get_all();
	 * function ini digunakan untuk mengambil banyak record.
	 * digunakan ketika ingin melihat data dari table tsb.
	 */
	function get_all($page=0,$limit=20, $q='',$published='',$uid=''){
		$this->load->database();
		$filter='';
		$page = $page*$limit;
		if($q != ''){
			$filter = " WHERE (";
			$fields = $this->db->list_fields("{$this->table}");
			foreach ($fields as $field){
			   $filter .= " {$this->table}.$field LIKE '%$q%' OR" ;
			}
			$filter = rtrim($filter,'OR').")";
		}
		
		if($published != ''){
			if($uid!='')
				$filter .= " ".(strpos($filter,"WHERE") === false?"WHERE":"AND")." {$this->table}.published='$published'";
		}
		
		if($uid != ''){
			if($uid!='')
				$filter .= " ".(strpos($filter,"WHERE") === false?"WHERE":"AND")." {$this->table}.user_id='$uid'";
		}
		
		//mengambil data dengan ada limitnya
		$sql = "SELECT {$this->table}.*, users.nama as nama_user, pemateri.nama as nama_pemateri, lokasi.nama as nama_lokasi FROM {$this->table}, users, pemateri, lokasi WHERE {$this->table}.lokasi_id=lokasi.id AND {$this->table}.pemateri_id=pemateri.id AND {$this->table}.user_id=users.id $filter ORDER BY {$this->table}.id ASC LIMIT $page,$limit;";
		$query['data'] = $this->db->query($sql);
		
		//mengambil count dari semua data. Digunakan untuk pengaturan pagingnya
		$sql = "SELECT {$this->table}.*, users.nama as nama_user, pemateri.nama as nama_pemateri, lokasi.nama as nama_lokasi FROM {$this->table}, users, pemateri, lokasi WHERE {$this->table}.lokasi_id=lokasi.id AND {$this->table}.pemateri_id=pemateri.id AND {$this->table}.user_id=users.id $filter";
		$query['count'] = $this->db->query($sql);
		$this->db->close();
		
		return $query;
	}
	
	function sort_kajian($page=0,$limit=20,$kota='',$q=array()){
		$this->load->database();
			
			$tmp_page=$page;
			$page = $page*$limit;
			$limit = ($tmp_page+1)*$limit;
			
			$filter='';
			$filters='';
			
			if($kota != ''){
				$filter .= " AND link_kota = '$kota'";
			}
			
			if(isset($q['tema']) && $q['tema'] != ''){
				$filters .= " ".($filters != ''?"OR":"")." kajian.judul LIKE '%$q[tema]%' OR kajian.tema LIKE '%$q[tema]%'";
			}
			
			if(isset($q['pemateri']) && $q['pemateri'] != ''){
				$filters .= " ".($filters != ''?"OR":"")." pemateri.id = $q[pemateri]";
			}
			
			if(isset($q['hari']) && $q['hari'] != ''){
				$filters .= " ".($filters != ''?"OR":"")." kajian.hari = $q[hari]";
			}
			
			if(isset($q['tanggal']) && $q['tanggal'] != ''){
				$filters .= " ".($filters != ''?"OR":"")." kajian.tanggal_mulai = $q[tanggal]";
			}
			
			if($filters != '')
				$filter .= " AND ($filters)";
				
			$sql = "SELECT kajian.*,users.nama as nama_user, pemateri.nama as nama_pemateri, lokasi.nama as nama_lokasi, lokasi.kota, lokasi.lat, lokasi.lng, lokasi.alamat, lokasi.keterangan ket_lokasi,lokasi.photo FROM (
				(SELECT *,IF(hari-WEEKDAY(NOW()) < 0,hari-WEEKDAY(NOW())+7,hari-WEEKDAY(NOW())) weight FROM kajian WHERE jns_kajian_id=1 AND published='yes') 
				UNION 
				(SELECT *,IF((WEEKDAY(tanggal_mulai)+1)-WEEKDAY(NOW()) < 0,(WEEKDAY(tanggal_mulai)+1)-WEEKDAY(NOW())+7,(WEEKDAY(tanggal_mulai)+1)-WEEKDAY(NOW())) weight FROM kajian WHERE jns_kajian_id<>1 AND published='yes' AND DATE(tanggal_mulai) >= DATE(NOW()) AND DATE(tanggal_mulai) <= DATE_ADD(NOW(),INTERVAL 30 DAY))
				) kajian, users, pemateri, (SELECT lokasi.*, kota.nama kota, kota.permalink link_kota FROM lokasi JOIN kota ON kota_id=kota.id) lokasi WHERE kajian.lokasi_id=lokasi.id AND kajian.pemateri_id=pemateri.id AND kajian.user_id=users.id $filter ORDER BY weight, jam_mulai";
			
			$query = $this->db->query($sql);
			
			$data = array();
			$tmp=-1;
			$record = $query->result_array();
			
			for($i=$page;$i<$limit;$i++){
				if(!isset($record[$i]))
					break;
				
				if($record[$i]['jns_kajian_id'] != 1)
					$record[$i]['hari'] = date('N',strtotime($record[$i]['tanggal_mulai']));
					
				if($tmp != $record[$i]['hari']){
					$tmp = $record[$i]['hari'];
				}
				$data[$tmp][] = $record[$i];
			}
			
		$this->db->close();
		
		$result['data'] = $data;
		$result['count'] = $query->num_rows();
		
		return $result;
	}
    
	/*
	 * function add();
	 * digunakan untuk menambahkan data
	 * parameter $data adalah array dimana key dari array tsb adalah nama field 
	   dan value dari arrat tsb adalah record yang akan diinsertakan
	 */
	function add($data){
		$this->load->database();		
		$this->db->trans_start();
			$this->db->insert("{$this->table}",$data);
		$this->db->trans_complete();
		
		$return = $this->db->trans_status();
		
		$this->db->close();
		return $return;
	}
	
	/*
	 * function edit();
	 * digunakan untuk mengedit data
	 * parameter $data adalah array dimana key dari array tsb adalah nama field 
	   dan value dari arrat tsb adalah record yang akan diinsertakan
	 * parameter $id adalah id dari data yang akan diedit
	 */
	 
	function edit($id,$data){
		$this->load->database();
			$this->db->where('id',$id);
			$this->db->update("{$this->table}",$data);
		$this->db->close();
	}
	
	/*
	 * function delete();
	 * digunakan untuk menghapus data
	 * parameter $id adalah id dari data tersebut
	 */
	function delete($id){
		$this->load->database();
		
		$this->db->trans_start();
			$this->db->query("DELETE FROM {$this->table} WHERE id='$id'");
		$this->db->trans_complete();
		
		$return = $this->db->trans_status();
		
		$this->db->close();
		return $return;
	}
}
?>